home *** CD-ROM | disk | FTP | other *** search
/ C/C++ Users Group Library 1996 July / C-C++ Users Group Library July 1996.iso / listings / v_12_06 / gotwals / largeint.h < prev    next >
C/C++ Source or Header  |  1994-04-01  |  2KB  |  76 lines

  1. ====================== Listing 2 ======================
  2. /* largeint.h : interface of the LargeInt class
  3.    multiple precision integer arithmetic
  4.    -------------------------------------------- */
  5. class LargeInt {
  6. friend LargeInt divRem(const LargeInt& u,
  7.    const LargeInt& v, LargeInt* r);
  8. friend char* evalFrac(const LargeInt& u,
  9.    const LargeInt& v, int precision,
  10.    char* dest, int lim);
  11.  
  12. public:
  13.    LargeInt();
  14.    LargeInt(int num);
  15.    LargeInt(unsigned num);
  16.    LargeInt(const char* str);
  17.    LargeInt(const LargeInt& lint);
  18.    ~LargeInt() {delete [] adr;}
  19.    int lintLen() {return len;}
  20.    int operator==(const LargeInt& lint) const;
  21.    int operator==(int num) const;
  22.    int operator<(const LargeInt& lint) const;
  23.    int operator<(int num) const;
  24.    const LargeInt& operator=(const LargeInt& lint);
  25.    const LargeInt& operator=(int num);
  26.    const LargeInt& operator=(unsigned num);
  27.    const LargeInt& operator=(const char* str);
  28.    LargeInt operator+(const LargeInt& lint) const;
  29.    LargeInt operator-(const LargeInt& lint) const;
  30.    LargeInt operator*(const LargeInt& lint) const;
  31.    LargeInt operator/(const LargeInt& lint) const;
  32.    LargeInt operator%(const LargeInt& lint) const;
  33.    LargeInt operator-() const; // unary minus
  34.    void operator*=(int num);
  35.    void powerTwo(int power);
  36.    char* binToDec(char* dest, int lim) const;
  37.    void decToBin(const char* str);
  38.    void lintDump() const;
  39.  
  40. private:
  41.    int* adr;  // address of most significant digit
  42.    int len;   // number of radix-2^32 digits
  43.    int sign;  // 1 ==> +; 0 ==> zero; -1 ==> -
  44.    LargeInt(int digits, int fill);
  45.    void normalize();
  46. };
  47.  
  48. /* manifest constants and other misc items
  49.    --------------------------------------- */
  50. const LargeInt tenTo9  = 1000000000u;
  51. const int intTenTo9    = 1000000000u;
  52.    // change both to 10^18 for 64-bit machine
  53. const LargeInt zero    = 0;
  54. const LargeInt one     = 1;
  55. const LargeInt two     = 2;
  56. const int numBitsStar3 = sizeof(int) * 8 * 3;
  57. const int PackFactor   = numBitsStar3 / 10;
  58.    // log of 2 to base 10 is approx. 3/10
  59.  
  60. /* int version of memcmp()
  61.    ----------------------- */
  62. inline int memcmpInt(const int* u, const int* v,
  63.       int n) {
  64.    while (n--) {
  65.       if (*u != *v)
  66.          return ((unsigned)*u < (unsigned)*v)? -1 : 1;
  67.       u++;
  68.       v++;
  69.    }
  70.    return 0;
  71. }
  72.  
  73. /* LargeInt function prototypes
  74.    ---------------------------- */
  75. LargeInt sqrt(const LargeInt& lint);
  76.